import { ApiProperty } from "@nestjs/swagger";
import { BaseEntity, PaginatedResult } from "src/common/entities/entities";
import { OrderState } from "src/dictionaries/index.enum";
import { Entity, Column, JoinColumn, ManyToOne, BeforeInsert, FindOperator, OneToOne } from "typeorm";
import { UserEntity } from "../../user/entities/user.entity";
import * as moment from 'moment';
export enum OrderType {
    /** 商品购买 */
    goods = 10,
    /** 卡密 */
    cami = 20,
    /** 会员 */
    member = 30
}
/** 支付类型, 10: 卡密支付;20: 微信支付; 30: 支付宝支付; 40: 线下支付; 50: 条件人数 */
export enum PayType {
    /** 卡密支付 */
    'camiPay' = 10,
    /** 微信支付 */
    'weChatPay' = 20,
    /** 支付宝支付 */
    'Alipay' = 30,
    /** 线下支付 */
    'offlinePay' = 40,
    /** 条件人数 */
    'numPay' = 50,
    /** 余额支付 */
    'balancePay' = 60,
    /** 后台开通 */
    'adminPay' = 70,
}
@Entity('order')
export class OrderEntity extends BaseEntity {
    /** 订单号 */
    @ApiProperty({ example: 'orderNo', description: '订单号' })
    @Column({
        type: 'varchar',
        length: 100,
        comment: '订单号',
        unique: true,
    })
    orderNo: string;
    @BeforeInsert()
    async encryptPwd() {
        // 获取当前日期和时间
        const now = moment();
        // 格式化日期部分为YYMMDD格式
        const datePrefix = now.format('YYMMDD');
        // 生成订单号
        const orderNumber = `ON${datePrefix}${now.valueOf()}`;
        // 返回订单号
        this.orderNo = orderNumber;
    }

    /** 订单标题 */
    @ApiProperty({ example: 'title', description: '订单标题' })
    @Column({
        type: 'varchar',
        comment: '订单标题',
        length: 100
    })
    title: FindOperator<string> | string;

    /** 订单状态 */
    @ApiProperty({
        enum: OrderState,
        description: '订单状态',
    })
    @Column({
        type: 'enum',
        enum: OrderState,
    })
    status: OrderState;

    /** 支付类型，10: 卡密支付;20: 微信支付; 30: 支付宝支付; 40: 线下支付; 50: 条件人数 */
    @ApiProperty({ example: 'consumeType', description: '支付类型，10: 卡密支付;20: 微信支付; 30: 支付宝支付; 40: 线下支付; 50: 条件人数' })
    @Column({
        comment: '支付类型，10: 卡密支付;20: 微信支付; 30: 支付宝支付; 40: 线下支付; 50: 条件人数',
        type: 'enum',
        default: PayType.offlinePay,
        enum: PayType,
    })
    payType: PayType;

    /** 支付类型，10: 商品;20: 卡密; 30: 会员; */
    @ApiProperty({ example: 'consumeType', description: '支付类型，10: 商品;20: 卡密; 30: 会员;' })
    @Column({
        comment: '支付类型，10: 商品;20: 卡密; 30: 会员;',
        type: 'enum',
        enum: OrderType,
    })
    type: OrderType;

    /** 金额 */
    @ApiProperty({ example: 'amount', description: '金额' })
    @Column({
        type: 'decimal', precision: 10, scale: 2,
        comment: '金额',
        default: 0
    })
    amount: number;

    /** 用户Id */
    @ApiProperty({ example: 'userId', description: '用户Id' })
    @Column({
        type: 'int',
        comment: '用户Id',
    })
    userId: number;
    @ManyToOne(() => UserEntity, (user) => user.order, {
    })
    @JoinColumn({ name: 'userId' })
    user: UserEntity;

}
export class OrderResult extends PaginatedResult {
    @ApiProperty({ example: 'data', description: 'data' })
    data: OrderEntity;
}